package com.basic.technology.study.introduction.thread.multi_thread.action;

import java.util.concurrent.TimeUnit;

/**
 * interrupt()方法是一个实例方法，它通知目标线程中断，
 * 也就是设置中断标志位为true，中断标志位表示当前线程已经被中断了。
 * isInterrupted()方法也是一个实例方法，它判断当前线程是否被中断（通过检查中断标志位）。
 * 最后一个方法interrupted()是一个静态方法，返回boolean类型，
 * 也是用来判断当前线程是否被中断，但是同时会清除当前线程的中断标志位的状态。
 *
 *
 * 调用interrupt()方法之后，线程的sleep方法将会抛出InterruptedException异常。
 * 注意：sleep方法由于中断而抛出异常之后，线程的中断标志会被清除（置为false），
 * 所以在异常中需要执行this.interrupt()方法，将中断标志位置为true
 */
public class InterruptDemo {
    static volatile boolean isStop = false;

    public static void main(String[] args) throws InterruptedException {
//        Thread thread1 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    if (isStop) {
//                        System.out.println("我要退出了1!");
//                        break;
//                    }
//                }
//                System.out.println("111111");
//            }
//        };
//        thread1.setName("thread1");
//        thread1.start();
//        TimeUnit.SECONDS.sleep(1);
//        isStop = true;


//        Thread thread2 = new Thread() {
//            @Override
//            public void run() {
//                while (true) {
//                    //休眠100秒
//                    try {
//                        TimeUnit.SECONDS.sleep(5);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                    System.out.println("我要退出了!");
//                    break;
//                }
//            }
//        };
//        thread2.setName("thread2");
//        thread2.start();
//        TimeUnit.SECONDS.sleep(1);
//        System.out.println("before interrupt : "+ thread2.isInterrupted());
//        thread2.interrupt();
//        System.out.println("after interrupt : "+ thread2.isInterrupted());

        Thread thread1 = new Thread() {
            @Override
            public void run() {
                while (true) {
                    //休眠100秒
                    try {
                        TimeUnit.SECONDS.sleep(5);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(" "+this.isInterrupted());
                    if (this.isInterrupted()) {
                        System.out.println("我要退出了!");
                        break;
                    }
                }
            }
        };

        thread1.setName("thread1");
        thread1.start();
        TimeUnit.SECONDS.sleep(1);
        System.out.println("before interrupt : " + thread1.isInterrupted());
        thread1.interrupt();
        TimeUnit.SECONDS.sleep(1);
        System.out.println("after interrupt : " + thread1.isInterrupted());

    }

}
